from flask import Flask, session
import uuid
import Redis
app = Flask(__name__)
app.secret_key = str(uuid.uuid4())

"""
1.将默认保存在cookie中的值 改变  保存在redis mogo  sqlalchmy memcahed
2.使用的时候
    1.config
        app.config['SESSION_TYPE'] = 'redis'
        app.config['SESSION_REDIS'] = Redis(host='192.168.0.94',port='6379')
    2.替换
        from flask-ession import Session
        Session(app)
    # 如果要修改session第二级别数据（嵌套字典）
        1.modified = True
        2.SESSION_REFRESH_EACH_REQUEST = True and session.permanent = TRUE(推荐)


"""

# 方式一 保存在cookie
# session默认存在cookie中
# from flask.sessions import SecureCokieeSessionInterface
# app.sesison_interface = SecureCokieeSessionInterface


# 方式二 保存在redis
# flask_session可以存在redis中
from flask_session import RedisSessionInterface
app.sesison_interface = RedisSessionInterface(
    redis=Redis(host="127.0.0.1", port=6379,key_prefix = "flask_")
)
# key_prefix = "flask_" 相当于给redis数据库的key加了一个前缀
# RedisSessionInterface源码有注释


# # 方式三
# from flask.ext.session import Session
# app.config['SESSION_TYPE'] = 'redis'
# from redis import Redis
# app.config['SESSION_REDIS'] = Redis(host='127.0.0.1',port='6379')
# Session(app)

"""
flask-session内部实现

当用户第一次访问
    生成一个uuid
    uuid保存为cookie的value cookie:{"session":"93a65047-795c-4065-a4b0-cee7c33b822c"}
    用pickle.dumps序列化 字典字符串(还可以加一个前缀 prefix)
    保存到redis
        redis中存的数据是
        {
            "93a65047-795c-4065-a4b0-cee7c33b822c":{
                "sid":"93a65047-795c-4065-a4b0-cee7c33b822c",
                "k1":"123"
            }
        }
    到此为止 redis中保存的是带有uuid唯一标识的 数据
            cookie中保存的是这个uuid表示
            这样下次请求来只要带着这个uuid，我们服务器就去数据库取这个数据，返回
            这样既满足要求，又保证数据的安全性
"""
@app.route('/login')
def login():
    session["k1"] = "123"
    return "login"


@app.route('/index')
def index():
    msg = session["k1"]
    print(msg)
    return msg


if __name__ == '__main__':
    app.__call__
    app.run(debug=True)
